home *** CD-ROM | disk | FTP | other *** search
/ CD World 1998 January / CD World - Ocak 1998.iso / misc / dbase55 / disk6 / custom.pak / PASSWORD.CC < prev    next >
C/C++ Source or Header  |  1995-07-18  |  5KB  |  150 lines

  1. *******************************************************************************
  2. *  FILE:         Password.cc
  3. *
  4. *  WRITTEN BY:   Borland Samples Group
  5. *
  6. *  DATE:         10/94
  7. *
  8. *  UPDATED:      6/95
  9. *
  10. *  REVISION:     $Revision:   1.6  $
  11. *
  12. *  VERSION:      Visual dBASE
  13. *
  14. *  DESCRIPTION:  This file contains a custom control, PasswordEntry,
  15. *                which allows entering a password.
  16. *
  17. *  PARAMETERS:   None
  18. *
  19. *  CALLS:        None
  20. *
  21. *  USAGE:        When creating a form, select the "Set Up Custom Controls"
  22. *                menu from the "File" menu.  Then select "Add" button on the
  23. *                "dBASE Custom Controls" page of the "Set Up Custom Controls"
  24. *                dialog. Select this file from the file selection dialog
  25. *                that comes up.  The controls in this file will be available
  26. *                on the "Custom" page of the "Controls" window.
  27. *
  28. *                You must assign a correctPassword property in your code
  29. *                by using the SetCorrectPassword() method.  After the password
  30. *                is entered, you can verify that it was correct by using the
  31. *                IsEnteredPasswordOk() method.
  32. *
  33. ********************************************************************************
  34. #include <Messdlg.h>
  35.  
  36. #define BACKSPACE_KEY     8     && -- ASCII value of Backspace key
  37. #define DELETE_KEY        127   && -- ASCII value of Delete key
  38. #define PASSWORD_CHAR     "*"   && -- Character to be displayed for each entered
  39.                                 &&    letter of the password
  40.  
  41.  
  42. *******************************************************************************
  43. *******************************************************************************
  44. class PasswordEntry(f,n) of Entryfield(f,n) custom
  45.  
  46. *  CONTROL:      Password Entryfield
  47. *
  48. *  DESCRIPTION:  This control allows entering a password, and provides
  49. *                methods that other classes can use to set the password
  50. *                and verify if the password was correct.
  51. *
  52. *******************************************************************************
  53.  
  54.    this.Border = .T.
  55.    this.Left = 5
  56.    this.PageNo = 1
  57.    this.Value = ""
  58.  
  59.    this.MaxLength = 15
  60.    this.Top = 3.0
  61.    this.Height = 1
  62.    this.Width = 15
  63.    this.Key = CLASS::KEY
  64.  
  65.  
  66.    ****************************************************************************
  67.    Procedure OnOpen(nChar, nPosition)
  68.    ****************************************************************************
  69.  
  70.    *** Custom properties
  71.    if type("this.enteredPassword") = "U"
  72.       this.enteredPassword = ""
  73.       this.correctPassword = ""    && This property must be manually assigned
  74.                                    && whereever this control is instantiated
  75.    endif
  76.  
  77.    *** Protect properties
  78.    protect enteredPassword, correctPassword
  79.  
  80.  
  81.    ****************************************************************************
  82.    Procedure SetCorrectPassword(password)
  83.  
  84.    * Assigns value to this.correctPassword
  85.    ****************************************************************************
  86.    private passwordLen
  87.  
  88.    passwordLen = len(password)
  89.    this.width = passwordLen
  90.    this.maxLength = passwordLen
  91.    this.correctPassword = password
  92.    this.enteredPassword = ""
  93.  
  94.  
  95.    ****************************************************************************
  96.    Function IsEnteredPasswordOk
  97.    ****************************************************************************
  98.  
  99.    return (this.enteredPassword == this.correctPassword)
  100.  
  101.  
  102.    ****************************************************************************
  103.    Procedure Key(nChar, nPosition)
  104.  
  105.    * Handles keys entered in the password entryfield
  106.    ****************************************************************************
  107.    private enteredChar, returnValue
  108.  
  109.    enteredChar = chr(nChar)
  110.    returnValue = .T.                 && By default output whatever key was typed
  111.    do case                           && Check for keys that modify the value
  112.       case nChar = BACKSPACE_KEY
  113.          this.enteredPassword = ;
  114.             stuff(this.enteredPassword, nPosition - 1, 1, "")
  115.       case nChar = DELETE_KEY
  116.          this.enteredPassword = ;
  117.             stuff(this.enteredPassword, nPosition, 1, "")
  118.       otherwise
  119.          if CLASS::IsValidChar(enteredChar)     && Check if alphanumeric
  120.             this.enteredPassword = ;
  121.                stuff(this.enteredPassword, nPosition, 1, enteredChar)
  122.             returnValue = asc(PASSWORD_CHAR)    && Output camouflage character
  123.          endif
  124.    endcase
  125.  
  126.    return returnValue
  127.  
  128.  
  129.    ****************************************************************************
  130.    Procedure IsValidChar(char)
  131.  
  132.    * Make sure entered key is alphanumeric
  133.    ****************************************************************************
  134.    private returnValue
  135.  
  136.    do case
  137.       case isalpha(char)                        && Letter?
  138.          returnValue = .T.
  139.       case char >= "0" .and. char <= "9"        && Digit?
  140.          returnValue = .T.
  141.       otherwise                                 && Invalid?
  142.          returnValue = .F.
  143.    endcase
  144.  
  145.    return returnValue
  146.  
  147. endclass
  148.  
  149.  
  150.